
namespace A {
    int i;
    namespace B {
        int i;              // 隐藏了 A::i
        int j;
        int f1()
        {
            int j;          // 局部变量 j 隐藏了 A::B::j
            return i;       // 返回 B::i
        }
    } // 命名空间 B 结束，此后 B 中定义的名字不再可见
    int f2() {
        // return j;        // 错误：j 没有被定义
    }
    int j = i;              // 用 A::i 进行初始化
}

namespace C {
    int i;
    int k;
    class D {
        public:
            D(): i(0), j(0) {}          // 初始化 D::i 和 D::j
            int f1() { return k; }      // 返回 C::k
            // int f2() { return h; }   // 错误：h 未定义
            int f3();
        private:
            int i;  // 隐藏了 C::i
            int j;
    };
    int h = i;      // 用 C::i 进行初始化
}

// 成员 f3 定义在 C 和 D 命名空间的外部
int C::D::f3() { return h; }    // 正确：返回 C::h